﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using SyncList.Business.ValueObject;

namespace SyncList.Business.Business
{


    /// <summary>
    /// Traitement
    /// </summary>
    class FusionService : IFusionService
    {

        /// <summary>
        /// Calculer les données de fusion 
        /// </summary>
        /// <param name="fullCollection">Collection complète de tous les utilisateurs</param>
        /// <returns></returns>
        public FileFusionCollection ComputeFusion(FullCollection fullCollection)
        {
            FileFusionCollection fileFusionCollection = new FileFusionCollection();


            // - Pour chaque utilisateur
            foreach (SingleUser singleUser in fullCollection)
            {
                // - Pour chaque fichier de cet utilisateur
                foreach (FileDef fileDef in singleUser.Files)
                {
                    FileFusion file = fileFusionCollection.FindFile(fileDef.Hash);
                    if (file == null)
                    {
                        // - Créer la définition du fichier commun
                        file = new FileFusion();
                        file.Hash = fileDef.Hash;                        
                        file.Size = fileDef.Size;
                        fileFusionCollection.Add(file);
                    }

                    // - Ajouter différent un nommage éventuellement
                    if (!file.Names.Contains(fileDef.Name))
                        file.Names.Add(fileDef.Name);

                    // - Ajouter l'utilisateur
                    file.Users.Add(singleUser.UserName);

                }
            }

            return (fileFusionCollection);
        }



        

    }
}
